%-----------------------------------------------------------------------------
\chapter{Stand der Technik}
%-----------------------------------------------------------------------------


%-----------------------------------------------------------------------------
\section{Java} 
%-----------------------------------------------------------------------------
"`The Java programming language is a general-purpose, concurrent, class-based,
object-oriented language"' \cite[S. 1]{gosling2013java}. Da sie erst von der
Laufzeitumgebung, der sogenannten "`Java Virtual Machine"', auf dem Computer auf
welchem sie ausgeführt wird interpretiert wird ist sie betriebssystemunabhängig
\cite{McMillan-5910448} \cite{Java-netcentric} und zählt zum gegenwärtigen
Zeitpunkt zu den populärsten Programmiersprachen weltweit \cite{TIOBE}.


%-----------------------------------------------------------------------------
\subsection{Java Community Process}
%-----------------------------------------------------------------------------
Die Funktionalitäten der Java Programmiersprache sowie Ihrer verschiedenen
Laufzeitumgebungen und Programmierschnittstellen werden kontinuierlich
weiterentwickelt und im Zuge des "`Java Community Process"' (JCP), welcher von
der Firma Oracle Inc. betrieben wird - dem aber unterschiedlichste Unternehmen
und Einzelindividuen weltweit angehören - definiert \cite[S. 3 f]{6083605}. Für
jede spezifizierte Erweiterung müssen Referenzimplementierungen bereitgestellt
werden um zu beweisen dass die Funktionalität umsetzbar ist \cite[S. 2]{JCP}.





\subsection{Java Specification Requests}
Einzelne Erweiterung werden im Zuge eines sogenannten "`Java Specification
Request"' (JSR) beschrieben, definiert und gegebenenfalls nach Zustimmung durch
die Firma Oracle Inc. umgesetzt \cite[S. 4]{JCP}. Jedem Java Specification
Request wird dabei zum Zwecke der Identifizierung eine eindeutige Nummer
zugewiesen \cite[S. 12]{JCP}.




%Haui noch überlegen die beiden nächsten Punkte unter Laufzeitumgebungen
% zusammenzufassen

\section{Verschiedene Java Plattformen}
%Haui die cites hier sparst du dir für am Ende auf
%Wenn es sich ausgeht suchst du ein paar und baust sie ein.
%Wäre natürlich super aber das hier grenzt schon etwas an Allgemeinwissen.
%Versteife dich bei den cites hier auch nicht auf wissenschaftliche.
Für verschiedene Anwendungszwecke existieren verschiedene
Laufzeit\-um\-ge\-bung\-en, auch Plattformen genannt. Sie beinhalten alle
denselben syntaktischen Sprach"-umfang unterscheiden sich jedoch in Hinblick auf
die mit der Plattform mitgelieferten Programmierschnittstellen. Auch existieren
für die unterschiedlichen Plattformen Implementierungen verschiedener
HerstellerInnen. Für die vorliegende Arbeit werden ausschließlich
Laufzeitumgebungen der Firma Oracle Inc. herangezogen.




%Haui noch überlegen mit Java Standard Edition
\subsection{Java Platform Standard Edition}
Die "`Java Platform Standard Edition"' (Java SE) enthält die in den jeweiligen
Java Specification Requests spezifizierten
Stan\-dard\-bi\-b\-lio\-thek\-en/-pro\-gram\-mier\-schnittstellen und ist als
Laufzeitumgebung für Java zur Ausführung von Desktop- sowie einfachen
Serveranwendungen vorgesehen \cite[S. 2]{Die-Java-Umgebung}.


 

%-----------------------------------------------------------------------------
\subsection{Java Platform Enterprise Edition}
%-----------------------------------------------------------------------------
Die "`Java Platform Enterprise Edition"' (Java EE) basiert auf der Java
Platform Standard Edition und definiert die Architektur für die Entwicklung von
mit Java entwickelten Geschäftsanwendungen \cite[S. 1 ff]{JavaEE-Spec}. 
Es werden die hierfür notwendigen Programmierschnittstellen spezifiziert sowie
die Laufzeitumgebung für die Ausführung der Anwendungen zur Verfügung gestellt
\cite[S. 12]{first-cup}. "`The Java EE platform is developed through the Java
Community Process (the JCP), which is responsible for all Java technologies.
Expert groups, composed of interested parties, have created Java Specification
Requests (JSRs) to define the various Java EE technologies"' \cite[S.
3]{jendrock2010java}.



\subsubsection{Java Platform Enterprise Edition Container}
Die Java Platform Enterprise Edition unterteilt sich weiters in sogenannte
Container im Rahmen welcher unterschiedliche Typen von Anwendungen, zB
HTML-Webanwendungen, ausgeführt werden. Sie stellen den einzelnen Anwendungen
dabei alle von ihnen benötigten Dienste, unter anderem Transaktionsmanagement
oder den Zugriff auf Netzwerk- oder Datenbankdienste, zur Verfügung
\cite[S. 8 f]{JavaEE-Spec}.



\subsection{Weitere Java Plattformen}
Daneben existieren noch weitere Java Plattformen für mobile Endgeräte (Java
Platform Micro Edition) sowie zur Erstellung graphischer Internetanwendungen
(JavaFX) \cite[S. 11 f]{first-cup}.





%Haui bei JASPIC überall noch überlegen dass auf Netzwerkebene wegzugeben
%und stattdessen zu schreiben auf Nachrichten- bzw. Mitteilungsebene



\section{Java EE Applikationsserver}
Java Platform Enterprise Edition Applikationsserver stellen für die auf ihnen
installierten und laufenden Geschäftsanwendungen die benötigten Dienste und
Schnittstellen, mittels der Java EE Laufzeitumgebung und unter Verwendung der
betreffenden Container, bereit \cite[S. 12 ff]{first-cup}. "`The application
developer can, for the most part, focus on implementing the business logic
aspect of an application; the application server on which the application is
deployed handles much of the complexity of concurrency, transaction and
persistence management"' \cite[S. 1]{The-deployers-problem}.



\subsection{Verschiedene Java EE Applikationsserver}
Es existieren unterschiedliche Java Platform Enterprise Edition
Applikationsser\-ver von unterschiedlichen HerstellerInnen. Diese weisen einen
unterschiedlichen Grad der Umsetzung einzelner spezifizierter
Programmierschnittstellen, zumeist zusätzliche, nicht standardisierte,
Programmierschnittstellen sowie auch Er\-wei\-ter\-ungen zB in Bezug auf
administrative Tätigkeiten auf.

%Diese weisen einen
%unterschiedlichen Grad der Unterstützung der mittles der Java Specification
%Requests definierten Schnittstellen auf. Auch werden nicht alle Java
%Specification Requests von allen Applikationsservern unterstützt.







\subsubsection{GlassFish Java EE Applikationsserver}
"`GlassFish is the Java EE reference implementation. This means that other
application servers may use GlassFish to make sure their product complies with
the specification"' \cite[S. 11]{heffelfinger2010java}. Er ist quelloffen,
kostenlos einsetzbar und wird von Oracle Inc. als voll kompatibel zu den Java
Platform Enterprise Edition 6 Spezifikationen zertifiziert
\cite{EE_Compatibility}.





\subsubsection{Oracle Weblogic Java EE Applikationsserver}
Oracle Weblogic ist ein kommerzieller nicht quelloffener Java Platform
Enterprise Edition Applikationsserver der Firma Oracle Inc.
\cite{Weblogic-sheet} und wird ebenso von diesem Unternehmen als voll kompatibel
zu den Java Platform Enterprise Edition 6 Spezifikationen zertifiziert
\cite{EE_Compatibility}.




\subsubsection{Weitere Java EE Applikationsserver}
Daneben existieren noch viele weitere Java EE Applikationsserver der
verschied-ensten HerstellerInnen \cite{Java-EE-list}





\section{JavaServer Faces}
"`JavaServer Faces (JSF) is a user interface (UI) framework for Java web
applications. It is designed to significantly ease the burden of writing and
maintaining applications that run on a Java application server and render their
UIs back to a target client"' \cite[S. 47]{JSF}. Dabei ist eine strikte Trennung
zwischen Anwendungslogik und Definition der Darstellung gegeben
\cite[S. 59]{why-JSF}.

\subsection{JavaServer Faces Deployment Descriptoren}
%Haui hier noch das cite
"`Deployment Descriptor"'-Dateien beschreiben in XML Form \cite{XML}, unter
anderem, die Konfiguration von JavaServer Faces Applikationen und definieren
von der Applikation benötigte Ressourcen welche vom Applikationsserver
bereit\-gestellt werden müssen. Auch können sie das applikationsspezifische
Berechtigungsmodell beschreiben und definieren \cite[S. 23]{JavaEE-Spec}.





%Haui das hier tatsächlich noch später überlegen ob du dies als Übeschrift läßt
% sowie ob dies nicht eine große Überschrift sein sollte, oder nicht.
% In Abstimmung mit den vorhergehenden Kapiteln durchfuehren

%-----------------------------------------------------------------------------
\section{Authentifizierung/Authentisierung \newline
und Autorisierung}
%-----------------------------------------------------------------------------

Unter dem Begriff "`Sicherheit"' können in der Informationstechnologie sehr
viele Aspekte subsumieren. Daher kann er sehr leicht mißverstanden werden. Die
vorliegende Arbeit betrachtet ausschließlich die folgenden beiden Aspekte
\cite[S. 14]{gs-leitfaden}:

\begin{itemize}
  \item [a)] Authentifizierung/Authentisierung
  \newline
  Die Identität einer BenutzerIn  wird festgestellt.
  \newline
  Die Begriffe Authentifizierung und Authentisierung werden weiters sehr oft
  synonym verwendet.
  \item [b)] Autorisierung
  \newline
  %Haui hier später noch überprüfen ob dies in Einklang mit den Punkten der
  % Durchführung usw. usf. steht.
  Es wird festgestellt ob eine BenutzerIn die notwendigen Rechte zur
  Durchführung einer bestimmten Aktion hat.
\end{itemize}


 
%Schematische Darstellung vielleicht einbinden.









\subsection{Programmatische Berechtigungsprüfung}
%Diese Subsektion läßt du hier nun einstweilen als alleiniges Zitat.
%Denn was soll hier an dieser Stelle noch mehr dazu gesagt werden.
"`When making use of programmatic security, you embed security enforcement
within the application witch programmatic checks ... to determine what a user
is allowed to do or see in the application, and then react to this information
appropriately"' \cite[S. 294]{JavaEE-in-a-nutshell}.






\subsection{Deklarative Berechtigungsprüfung}
"`Declarative security refers to the means of expressing an application’s
security structure, including security roles, access control, and authentication
requirements in a form external to the application"' \cite[S. 34]{JavaEE-Spec}.
Dies kann ent\-weder in zur Applikation gehörenden XML-Dateien, den Deployment
Descriptoren oder in Form von speziellen Anmerkungen, sogenannten Annotationen,
im Programmquelltext angegeben werden.


%So oder so wenn du es mit aufnimmst hierauf referenzieren denn sehr gut erklärt
%
% http://my.safaribooksonline.com/book/programming/java/0596101422/j2ee-security/javaentnut3-chp-10-sect-3






\subsection{Applikationsspezifische Filter}
"`Filters can be used to intercept HTTP requests before they are processed by
other Java EE components ... and post-process HTTP responses before they are
sent backto the client. Multiple filters can be chained together to perform
several pre-processing steps on the requests or post-processing steps on the
responses"` \cite[S. 3]{sec-filter}. Hierbei werden in den jeweiligen Filtern
entsprechende Berechtigungsprüfungen durchgeführt und BenutzerInnen abhängig vom
Ergebnis der Prüfung auf Anmeldeseiten weitergeleitet oder Zugang zur
gewünschten Ressource gewährt.





%Wie bei den oberen beiden Kapiteln.
%Vielleicht doch dazu nehmen!
%Wiederum ein Argument weiter oben mit aufzunehmen dass du dies anhand einer
% Java Server Faces Webapplikation erklärst. Scheint ein wichtiger Punkt zu sein.






%Haui
%Am Ende auch kontrollieren ob du wohl nicht zwei Mal auf das gleiche Paper in
% der References.bib verweist.


%Und auch kontrollieren ob du alle unpublished Referenzen archivierd hast


\subsection{Java Authentication and Authorization Service}
"`The Java Authentication and Authorization Service (JAAS) is designed to
provide a framework and standard programming interface for authenticating
users and for assigning privileges"' \cite[S. 1]{JAAS-explanation}. "`It
implements a Java technology version of the standard Plugable Authentication
Module (PAM) framework, and extends the access control architecture of the Java
2 Platform in a compatible fashion \ldots"' \cite[S. 13]{JCP-151}. Dadurch
können, über eine Konfigurationsdatei administrier- und zur Laufzeit
austauschbare Dienste, für die Authentifizierung von Benutzern, und das Zuweisen von Berechtigungen zu ebendiesen, zur Verfügung gestellt
werden. Diese Dienste können, ohne über die Implementierungsdetails Bescheid zu
wissen, über die definierte Programmierschnittstelle in Anwendungen verwendet 
werden. Auch ist es seit Version 1.4 Bestandteil der Java
Enterprise Edition \cite[S. 100]{JCP-151}.


%Das mit JAAS macht Applikation und Anmeldung und Co. voneinander unabhängig
% dann bei der Argumentation für die gewählte Umsetzung verwenden




%Nachteile dann bei Umsetzung verweisen. Nur HTTP - kein HTTPServerletRequest
% und keinen Response. Fix vorgegeben usw. usf. noch genau checken.



\subsection{Java Authentication Service Provider Interface for Containers}

%Definitiv noch auf unterschiedliche Container verweisen
Java Authentication Service Provider Interface for Containers (JASPIC)
definiert, unter anderem, die Schnittstelle für Programme welche
Authentisierungs- sowie Autorisierungsinformationen bereitstellen und von Java
Laufzeitumgebungen wäh\-rend der Ausführung selbstständig eingebunden werden
können sollen. "`This specification extends the pluggable authentication
concepts of the Java Authentication and Authorization Service (JAAS) to the
authentication of network messages"' \cite[S. 11]{JSR-196}. Die Spezifikation
ist Teil der Java Platform Enterprise Edition Version 6 \cite[S.
159]{JavaEE-Spec}.



%Abkürzung hier zum ersten Mal angeben.
%Was ist JASPIC. Den JCP finden und darauf verweisen.
%Wiederum auf bestehenden Quellcode oder noch besser wisschenschaftliche Arbeit
%verweisen. 

%Vorteile dann bei Umsetzung verweisen. Nur HTTP - kein HTTPServerletRequest und
%keinen Response. Fix vorgegeben usw. usf. noch genau checken.

%Aber auch bei Umseztung oder später dann bei Resüme eben schreiben dass dies
%alles noch sehr neu ist. HerstellerInnen verwendne nicht einmal den gleichen
%Namen. Auf die entsprechenden Quellen verweisen usw. usf.




\subsection{Java Authorization Contract for Containers}
%Haui definitiv mit aufnehmen was container in Java Enterprise Edition sind
%Die Namensgebung weiter oben und hier unten soll bzw. sollte auch gleich sein
Java Authorization Contract for Containers (JACC) definiert wie, und auf welche
Art und Weise, selbst definierte Autorisierungsroutinen erstellt und eingebunden
werden können. Sodass sie von Java Enterprise Edition Containern verwendet
werden um bei Aktionen welche Berechtigungen erfordern zu entscheiden ob die
betroffene BenutzerIn dazu berechtigt ist oder nicht. Hierbei wird das
diesbezügliche Standardverhalten der Laufzeitumgebung mit den selbst definierten
Autorisierungsroutinen überschrieben \cite[S. 1 f]{JSR-JACC}. Dies kann unter
anderem dazu verwendet werden um spezifische Berechtigungsserver, welche die
eigentliche Autorisierungsentscheidung treffen, einzubinden.








%Haui
%Nicht vergessen irgendwo dann das mit container managed security bei den
% Ergebnissen ansprechen. Wieso das jetzt container managed security ist und was
% das bedeutet.

